package com.childenglish.utils;

/**
 * 用户数据处理工具类
 * 统一处理用户邮箱、手机号等敏感数据的加密/解密逻辑
 */
public class UserDataHelper {
    
    /**
     * 处理并加密邮箱字段
     * 如果字段为空则返回null，否则先尝试解密（如果已加密），再加密存储
     * 
     * @param email 邮箱（可能是明文或已加密）
     * @return 加密后的邮箱，如果输入为空则返回null
     */
    public static String processAndEncryptEmail(String email) {
        if (email == null || email.trim().isEmpty()) {
            return null;
        }
        
        String trimmedEmail = email.trim();
        
        // 如果前端已加密，先解密再加密存储
        try {
            trimmedEmail = DataEncryptionUtils.decrypt(trimmedEmail);
        } catch (Exception e) {
            // 如果解密失败，说明是明文，直接使用
        }
        
        // 加密存储
        return DataEncryptionUtils.encryptSensitiveField(trimmedEmail);
    }
    
    /**
     * 处理并加密手机号字段
     * 如果字段为空则返回null，否则先尝试解密（如果已加密），再加密存储
     * 
     * @param phone 手机号（可能是明文或已加密）
     * @return 加密后的手机号，如果输入为空则返回null
     */
    public static String processAndEncryptPhone(String phone) {
        if (phone == null || phone.trim().isEmpty()) {
            return null;
        }
        
        String trimmedPhone = phone.trim();
        
        // 如果前端已加密，先解密再加密存储
        try {
            trimmedPhone = DataEncryptionUtils.decrypt(trimmedPhone);
        } catch (Exception e) {
            // 如果解密失败，说明是明文，直接使用
        }
        
        // 加密存储
        return DataEncryptionUtils.encryptSensitiveField(trimmedPhone);
    }
    
    /**
     * 解密密码字段（用于处理前端加密的密码）
     * 
     * @param password 密码（可能是明文或已加密）
     * @return 解密后的明文密码
     */
    public static String decryptPassword(String password) {
        if (password == null || password.trim().isEmpty()) {
            return password;
        }
        
        try {
            return DataEncryptionUtils.decrypt(password);
        } catch (Exception e) {
            // 如果解密失败，可能是明文，直接返回
            return password;
        }
    }
    
    /**
     * 根据角色获取用户类型
     * 00=管理员, 01=家长, 02=幼儿, 03=教师
     * 
     * @param role 角色
     * @return 用户类型
     */
    public static String getUserTypeByRole(String role) {
        if (role == null) {
            return "01"; // 默认为家长
        }
        
        switch (role.toLowerCase()) {
            case "admin":
                return "00";
            case "parent":
                return "01";
            case "child":
                return "02";
            case "teacher":
                return "03";
            default:
                return "01"; // 默认为家长
        }
    }
    
    private UserDataHelper() {
        // 工具类，禁止实例化
    }
}

